#include "testthread.h"
#include <QMutex>

TestThread::TestThread()
{
    if (!count) {
        count = QSharedPointer<uint>(new uint(0));
    }
}

//uint TestThread::count = 0;
QSharedPointer<uint> TestThread::count;
QMutex TestThread::mutex;

void TestThread::run()
{
//    test();
//    return;
    for (int i = 0; i < 10; ++i) {
        mutex.lock();
        (*count)++;
        mutex.unlock();
    }
}

uint TestThread::get_count()
{
    return *count;
}

class Test
{
public:
    Test();
};
Test::Test()
{
    static int i = 0;
    qDebug("%s[%d]: i(%d)",__func__,__LINE__, ++i);
//    QThread::sleep(1);
}

static Test *a = NULL;
void TestThread::test()
{
    qDebug("%s[%d]: ",__func__,__LINE__);
    if (a == NULL) {
        a = new Test();
    }
    qDebug("%s[%d]: ",__func__,__LINE__);
    qDebug("%s[%d]: a[0x%08x]",__func__,__LINE__, a);
}

/**
 * 结论: QSharePointer类的线程级安全指的是在多个线程中操作QSharePointer类本身是安全的，
 * 但是操作该类指向指针数据是不安全的，需要由该数据类自己提供线程安全机制
 */

